using AiQiuQuan.Sport.Model.Models;
using AiQiuQuan.Sport.Core;

namespace AiQiuQuan.Sport.WebApi.Services
{
    /// <summary>
    /// 课程管理
    /// </summary>
    public interface ICourseService : ITransientDependency
    {
        /// <summary>
        /// 查询课程概要
        /// </summary>
        Task<CourseDto> GetAsync(Guid id);

        /// <summary>
        /// 查询课程及附加信息
        /// </summary>
        Task<CourseDto> QueryCouseAndAttachInfoAsync(CourseInfoRequestDto request);

        /// <summary>
        /// 查询课程信息
        /// </summary>
        Task<CourseDto> QueryCouseAsync(CourseInfoRequestDto request);

        /// <summary>
        /// 获取课程教练列表
        /// </summary>
        /// <param name="courseId">课程ID</param>
        Task<List<CourseCoacherDto>> QueryCourseCoacherListAsync(Guid courseId);

        /// <summary>
        /// 删除课程教练
        /// </summary>
        Task<UnaryResult> DeleteCourseCoacherAsync(CourseCoacherDelDto request);

        /// <summary>
        /// 获取课程学生列表
        /// </summary>
        /// <param name="courseId">课程ID</param>
        Task<List<CourseStudentDto>> QueryCourseStudentListAsync(Guid courseId);

        /// <summary>
        /// 课程学生记录
        /// </summary>
        Task<PageResult<CourseStuentRecordDto>> QueryCourseStuentRecordListAsync(CourseStudentRecordPageRequestDto request);

        /// <summary>
        /// 获取课程购买信息
        /// </summary>
        /// <param name="courseDetailId">课程明细ID</param>
        Task<CouseBuyInfoDto> GetCourseBuyInfoAsync(Guid courseDetailId);

        /// <summary>
        /// 课程购买
        /// </summary>
        Task<UnaryResult<CourseBuyResultDto>> BuyAsync(CourseBuyRequestDto request);

        /// <summary>
        /// 课程分页列表
        /// </summary>
        Task<PageResult<CourseDto>> PageListAsync(CoursePageRequestDto request);

        /// <summary>
        /// 我的课程列表
        /// </summary>
        Task<PageResult<CourseDto>> GetMyCourseListAsync(CourseSelfPageRequestDto request);

        /// <summary>
        /// 获取教练课程列表
        /// </summary>
        /// <param name="coacherUserId">教练用户ID</param>
        Task<List<CourseDto>> GetCoacherCourseListAsync(Guid coacherUserId);

        /// <summary>
        /// 获取我的课程计划列表(团体课程、私教)
        /// </summary>
        Task<List<MyCoursePlanDto>> GetMyCoursePlanListAsync();

        /// <summary>
        /// 教练课程列表
        /// </summary>
        Task<PageResult<CourseDto>> GetCoacherCourseListAsync(CourseSelfPageRequestDto request);

        /// <summary>
        /// 新增
        /// </summary>
        Task<UnaryResult> AddAsync(CourseAddDto model);

        /// <summary>
        /// 教练课程计划状态修改
        /// </summary>
        Task<UnaryResult> UpdateCoursePlanStateAsync(CoursePlanStateUpdateDto request);

        /// <summary>
        /// 学生点名
        /// </summary>
        Task<UnaryResult> CallStudentAsync(CourseStudentRequestDto request);

        /// <summary>
        /// 课程学生删除
        /// </summary>
        Task<UnaryResult> DeleteStudentAsync(CourseStudentDelDto request);

        /// <summary>
        /// 课程相关状态、标记修改
        /// </summary>
        Task<UnaryResult> UpdateCourseFlagAsync(CourseFlagUpdateDto request);

        /// <summary>
        /// 修改
        /// </summary>
        Task<UnaryResult> UpdateAsync(CourseUpdateDto model);

        /// <summary>
        /// 删除
        /// </summary>
        Task<UnaryResult> DeleteAsync(Guid id);
    }
}
